package org.footballmanager.pandafootball.system.service;

import org.footballmanager.pandafootball.system.domain.Photo;
import org.footballmanager.pandafootball.system.domain.enums.FL;
import org.footballmanager.pandafootball.system.form.impl.PhotoSearchForm;
import org.springframework.ui.Model;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.List;

public interface PhotoService extends BaseService<Photo> {
	/**
	 * 根据国籍找对应的小图片信息
	 * @param gj 国籍
	 * @return 小图片信息
	 */
	Photo findNationSmall(String gj);

    /**
     * 根据国籍找对应的大图片信息
     * @param gj 国籍
     * @return 大图片信息
     */
	Photo findNationBig(String gj);

	/**
	 * 根据类型查找图像
	 * @param type 类型
	 * @return 图像集合
	 */
    List<Photo> findByType(FL type);

    /**
     * 查询
     * @param entityname 实体类名
     * @param map 参数
     * @param photoSearchForm 条件
     */
    void search(String entityname, Model map, PhotoSearchForm photoSearchForm);

    /**
     * 删除所有
     * @param photoSearchForm 条件
     * @param request 请求
     */
    void deleteAll(PhotoSearchForm photoSearchForm, HttpServletRequest request);

    /**
     * 保存图像
     * @param photo 图像实体类
     * @param img 上传文件
     * @param request 请求
     */
    void save(@Valid Photo photo, MultipartFile img, HttpServletRequest request);

    /**
     * 更新图像
     * @param photo 图像实体类
     * @param img 上传文件
     * @param request 请求
     */
    void update(@Valid Photo photo, MultipartFile img, HttpServletRequest request);

    /**
     * 保存多张图像
     * @param fl 分类
     * @param files 上传的文件们
     * @param request 请求
     */
    void saveMore(FL fl, List<String> files, HttpServletRequest request);

    /**
     * 添加文件到文件列表里
     * @param file 上传文件
     * @param type 类型
     * @param files 文件列表
     * @param request 请求
     */
    void addMore(MultipartFile file, FL type, List<String> files, HttpServletRequest request);

    /**
     * 查找图像
     * @param photoSearchForm 添加
     * @param id 主键
     * @param index 正反向
     */
    Photo find(PhotoSearchForm photoSearchForm, Long id, Integer index);

    /**
     * 处理图像
     * @param photo 图像信息
     * @param img 上传文件
     */
    void processPhoto(Photo photo, MultipartFile img);
}
